#!/bin/bash

set -e  # 任一命令失败则停止

# === 检查sudo权限 ===
check_sudo() {
    echo "🔑 检查sudo权限..."
    if ! sudo -v; then
        echo "❌ 无法获取sudo权限，请确保你的用户有sudo权限"
        exit 1
    fi
    # 保持sudo权限活跃
    trap 'sudo -k' EXIT
}

rust_dir=/opt/rust
rustup_dir="$rust_dir/.rustup"
cargo_dir="$rust_dir/.cargo"
group=rustup

# === 检查组和用户组成员资格 ===
group_exists() {
    getent group "$group" > /dev/null 2>&1
}

user_in_group() {
    groups | grep -qw "$group"
}

# === 主逻辑 ===
if group_exists && user_in_group; then
    echo "✅ 用户 $USER 已属于组 '$group'，继续安装 rustup..."

    # 下载并安装
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o "$HOME/rustup-init.sh"

    sudo mkdir -p "$rust_dir"
    sudo chown "root:$group" "$rust_dir"
    sudo chmod 775 "$rust_dir"
    sudo chmod g+s "$rust_dir"  # setgid，确保新文件继承组

    sh "$HOME/rustup-init.sh" -y \
        --no-modify-path \
        --profile minimal \
        --default-toolchain none \
        --rustup-dir "$rustup_dir" \
        --cargo-dir "$cargo_dir"

    rm -f "$HOME/rustup-init.sh"
    echo "✅ rustup 已安装到 $rust_dir"

else
    echo "ℹ️ 检测到组 '$group' 未配置或用户 '$USER' 不在组中。"
    
    # 创建组（如果不存在）
    if ! group_exists; then
        echo "🔧 创建组 '$group'..."
        sudo groupadd -f "$group"
    fi

    # 添加用户到组（如果不在）
    if ! user_in_group; then
        echo "🔧 将用户 '$USER' 添加到组 '$group'..."
        sudo usermod -aG "$group" "$USER"
    fi

    echo ""
    echo "⚠️  注意：Linux 组权限变更需要重新登录才能生效！"
    echo "➡️  请执行以下操作："
    echo "    1. 退出当前终端会话"
    echo "    2.  重新登录"
    echo "    3. 再次运行此脚本完成安装"
    exit 1
fi
